package com.season.seasonStudy.javase.j_007_string;

public class StringTest {

	public static void main(String[] args) {
		/**
		 * String 和StringBuffer
		 * 	字符串内置字符数组
		 * 	1	字符串任何方法都不是在原先的字符串空间内改变， 
		 * 		而是新开空间，所以原先的字符串变量不会发生改变
		 *      只是返回值发生了改变
		 不建议使用String 进行字符串拼接 无论使用+或 concat方法（浪费空间）
		 可以作为特殊的值传递使用
		 		String a="aaa";
		 		String b=a;
		 		b=b.concat(" hello");
		 		b 改变了
		 		a 不会发生任何变化；
		 * 	2 字符串常量在常量池中只开一次空间
		 *  3 每次new 对象都是新开空间
		 *  4 常用方法：
		 *  A-	int 长度=对象.length();//字符串长度
		 *  A	char 变量=对象.charAt(下标)；//根据下标获取对应位置的字符
		 *  B	int 找到的位置=被查找对象.indexOf("查找字符",查找起始位置) ；
		 *  	（从字符串左边开始向右找，找第一个出现的位置，返回-1说明没找到，第二个参数不写表示从索引0位置开始 查找）
		 *  C	int 找到的位置=被查找对象.lastIndexOf("查找字符",查找起始位置) ；
		 * 		（从字符串右边开始向左找，找第一个出现的位置，返回-1说明没找到，
		 * 						第二个参数不写表示从索引长度减一位置开始 查找）
		 *  D	String 截取结果=对象.substring(起始位置，结束位置)；
		 *  	（截取子串，包含起始位置，不包含结束位置，第二个参数不写表示截取到最后） 
		 *  E   String[] 分割结果=对象.split("用于分割的字符串");
		 *  	(分割结果不包含分割字符串,注意分个字符串在两头的情况（参数可用正则表达式）) ;
		 *  F   boolean 是否忽略大小写相等=字符串1.equalsIgnoreCase(字符串2)
		 *  	（字符串1和字符串2在忽略大小写后是否相等）
		 *  G   String 大写结果=对象.toUpperCase();
		 *  H   String 小写结果=对象.toLowerCase();
		 *  I   String 拼接结果=对象.concat(字符串2);
		 *  J   boolean 是否以字符串2开头=fileName.startsWith(字符串2);
		 *  K	boolean 是否以字符串2结尾=fileName.endsWith(字符串2);
		 *  L	String 替换结果=被替换对象.replaceAll(要替换的字符, 替换成的字符串);
		 *  	(将字符串对象中的所有的 第一个参数的字符串（可用正则表达式），替换成第二个参数);
		 *  M	boolean 是否匹配=对象.matches(正则表达式);
		 *  	正则表达式：
		 *  		[罗列字符范围]代表范围内的一个字符
		 *  		[^罗列字符范围]代表不在范围内的一个字符
		 *  		{数字1，数字2}代表前面的字符匹配次数，数字1表示最少几个，数字2表示最多几个。
		 *  		{数字1，}表示至少数字1个字符，没有逗号表示固定位数
		 *  		| 表示 或者
		 *  		\ 表示正则表达式的转义字符，在字符串中必须写2个\（在java中也是转义字符）
		 *  		+： 一到多个
		 *  		？： 0到1个
		 *  		*：  0到多个
		 *  		\d：代表数字，大写与之相反
		 *  		\w: 代表数字字母下划线，大写与之相反
		 *  
		 *  StringBuffer sbf1=new StringBuffer("字符串");//字符串转成StringBuffer
		 *  引用类型：在同一空间内改变其中的值，性能比String高，
		 *  	引用传递：
		 *  		StringBuffer sbf=new StringBuffer("aaa");
		 *  		StringBuffer sbf2=sbf;
		 *  		sbf2.append(" hello");
		 *  		sbf2发生改变
		 *  		sbf1也会发生改变，因为同一地址
		 *  A	同一对象 =对象.append(要添加的字符串);//末尾添加新字符串
		 *  B   同一对象 =对象.insert(插入位置，要插入的字符串);//在插入位置处，插入新字符串
		 	C   String 字符串对象=对象.toString();//转回字符串
		 */	
		String str="abcDefgabcDefg";
		String str2=new String("abc");
		System.out.println(str2.equalsIgnoreCase(str));
		System.out.println(str.toUpperCase());
		String str3=str.toLowerCase();
		str.concat(" hello").concat(" !");
/*		for (int i = 0; i < str.length(); i++) {
			char c=str.charAt(i);
			System.out.println(c);
		}*/
		
		//int index=str.indexOf("c",0);
		//int index=str.lastIndexOf("c",5);
		//System.out.println(index);
		String fileName="defgappleabca.java";
		System.out.println(fileName.substring(3,8));
		
		//String file=fileName.substring(fileName.indexOf("@")+1,
		//									fileName.indexOf("."));
		//System.out.println(file);
		
		String[] strs=fileName.split("s");
		System.out.println("=---------------------"+strs.length);
		for (int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}
		System.out.println(fileName.startsWith("abc-"));
		System.out.println(fileName.endsWith(".java"));
		//----------------------------------------------
		String strx=fileName.replaceAll("a", "A2");
		System.out.println(strx);
		String test="..";
		boolean f=test.matches("\\.{2}");
		System.out.println(f);
		
		
		
		
	}

}
